from PySide2 import QtWidgets,QtCore,QtGui
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QFileDialog
import ExceInit
import config
import ToolFun
import sys

# 电压【设置测试参数】槽函数
class SetTestParameterVoltage:
    def __init__(self):
        self.SetTestParameter = QUiLoader().load("./UI/SetParameterVoltage.ui")  # 设置参数界面文件
        self.SetTestParameter.pushButton.clicked.connect(self.parameter_enter)
        self.SetTestParameter.setWindowTitle("【古鑫】安捷伦34465 电压测试软件 V1.0")
        # 获取全局变量中的内容
        self.test_parameter = config.get_test_parameter_value() #获取电压上下限、SN长度
        self.init_device = config.get_init_device_value() #获取测试型号、设备ID
        set_flag = config.get_set_flag_value() #获取是否已经配置过

        # 判断是否配置过，如果有则沿用更新UI
        if not set_flag:
            pass
        else:
            self.SetTestParameter.SNLenSpinBox.setValue(int(self.test_parameter['SNLenSpinBox']))  # SN长度
            self.SetTestParameter.SetMaxLineEdit.setText(self.test_parameter['MaxData'])  # 电压上限
            self.SetTestParameter.SetMinLineEdit.setText(self.test_parameter['MinData'])  # 电压下限
            self.SetTestParameter.SaveNGcheckBox.setCheckState(self.test_parameter['SaveNGcheck'])  # 保存数据按钮 !!!内容未编辑

    # 测试参数确认按钮按下后
    def parameter_enter(self):

        # 获取内容
        self.test_parameter['SNLenSpinBox'] = self.SetTestParameter.SNLenSpinBox.text()    #SN长度
        self.test_parameter['MaxData'] = self.SetTestParameter.SetMaxLineEdit.text()  #电压上限
        self.test_parameter['MinData'] = self.SetTestParameter.SetMinLineEdit.text()  #电压下限
        self.test_parameter['SaveNGcheck'] = self.SetTestParameter.SaveNGcheckBox.checkState()# 保存数据按钮 !!!内容未编辑

        # 初始化Excel表，将测试标准、设备等信息填入表中
        send_excel_parameter = ExceInit.ExcelData()
        fine_name = send_excel_parameter.ExcelInit(self.test_parameter['MaxData'], \
                                                self.test_parameter['MinData'], \
                                                self.test_parameter['SNLenSpinBox'],\
                                                'V', \
                                                self.init_device['TestModel'],\
                                                self.init_device['ScanDeviceID'], \
                                                self.init_device['BatchNo']  )
        # 将文件名，放置全局变量中
        config.change_excel_name_value(fine_name)

        # 创建表后重新初始行、列、序列号
        config.recovery_ui_excel()

        # 置位set_flag，代表已经配置过了
        config.change_set_flag_value(True)

        # 确认后的关闭窗口
        self.SetTestParameter.close()

# 电压差【设置测试参数】槽函数
class SetTestParameterWindowDiff:
    def __init__(self):

        self.SetTestParameter = QUiLoader().load("./UI/SetParameterDiff.ui")  # 设置参数界面文件
        self.SetTestParameter.pushButton.clicked.connect(self.parameter_enter)
        self.SetTestParameter.setWindowTitle("【古鑫】安捷伦34465 电压差测试软件 V1.0")
        # 获取全局变量中的内容
        self.test_parameter = config.get_test_parameter_value() #获取电压上下限、SN长度
        self.init_device = config.get_init_device_value() #获取测试型号、设备ID
        set_flag = config.get_set_flag_value() #获取是否已经配置过

        # 判断是否配置过，如果有则沿用更新UI
        if not set_flag:
            pass
        else:
            self.SetTestParameter.SNLenSpinBox.setValue(int(self.test_parameter['SNLenSpinBox']))  # SN长度
            self.SetTestParameter.SetMaxLineEdit.setText(self.test_parameter['MaxData'])  # 电流上限
            self.SetTestParameter.SetMinLineEdit.setText(self.test_parameter['MinData'])  # 电流下限
            self.SetTestParameter.SetDifMaxLineEdit_2.setText(self.test_parameter['VoltageDiffMax'])  # 电压差上限
            self.SetTestParameter.SetDifMinLineEdit_2.setText(self.test_parameter['VoltageDiffMin'])  # 电压差下限
            self.SetTestParameter.SetTimeSpinBoxMax.setText(self.test_parameter['SetDifTimeMax'])  # 要求静置时间上限
            self.SetTestParameter.SetTimeSpinBoxMin.setText(self.test_parameter['SetDifTimeMix'])  # 要求静置时间下限

    # 测试参数确认按钮按下后
    def parameter_enter(self):

        # 获取内容
        self.test_parameter['MaxData'] = self.SetTestParameter.SetMaxLineEdit.text()  #电压上限
        self.test_parameter['MinData'] = self.SetTestParameter.SetMinLineEdit.text()  #电压下限
        self.test_parameter['SNLenSpinBox'] = self.SetTestParameter.SNLenSpinBox.text()    #SN长度
        self.test_parameter['VoltageDiffMax'] = self.SetTestParameter.SetDifMaxLineEdit_2.text()  #电压差上限
        self.test_parameter['VoltageDiffMin'] = self.SetTestParameter.SetDifMinLineEdit_2.text()  #电压差下限
        self.test_parameter['SetDifTimeMax'] = self.SetTestParameter.SetTimeSpinBoxMax.text()  #要求静置时间上限
        self.test_parameter['SetDifTimeMix'] = self.SetTestParameter.SetTimeSpinBoxMin.text()  #要求静置时间下限

        # 初始化Excel表，将测试标准、设备等信息填入表中
        send_excel_parameter = ExceInit.ExcelDataDiff(self.test_parameter['MaxData'], \
                                                    self.test_parameter['MinData'], \
                                                    self.test_parameter['SNLenSpinBox'],\
                                                    'Diff', \
                                                    self.init_device['TestModel'], \
                                                    self.test_parameter['VoltageDiffMax'], \
                                                    self.test_parameter['VoltageDiffMin'], \
                                                    self.test_parameter['SetDifTimeMax'],\
                                                    self.test_parameter['SetDifTimeMin'], \
                                                    self.init_device['ScanDeviceID'], \
                                                    self.init_device['BatchNo'])
        fine_name = send_excel_parameter.ExcelInit()

        # 将电压差EXCEL文件名，放置全局变量中
        config.change_excel_name_value(fine_name)

        # 创建表后重新初始行、列、序列号
        config.recovery_ui_excel()

        # 置位set_flag，代表已经配置过了
        config.change_set_flag_value(True)

        #选择汇总文件提示框
        QtWidgets.QMessageBox.information(
            self.SetTestParameter,
            '请操作',
            '选择第一次电压的汇总表，选完后【稍等片刻】进行初始化。')

        # 打开文件选择框，让用户选择
        file_path = QFileDialog.getOpenFileName(
            self.SetTestParameter,  # 父窗口对象
            "选择第一次电压的汇总表",  # 标题
            r"D:\古鑫自耗电测试数据\电压测试",  # 起始目录
            "文件类型 (*.xlsx)"  # 选择类型过滤项，过滤内容在括号中
        )
        # 将静置前电压汇总表地址放置全局变量中
        config.change_file_path_value(file_path) #更改汇总地址全局变量

        # 遍历前电压表，将其内容缓存起来
        config.change_excel_sn_list_value(ExceInit.rede_excel_sn_list(self.SetTestParameter,file_path[0]))

        # 判断设备编号是否一致
        if ToolFun.device_id_judge(self.SetTestParameter):
            # 设备编号一致
            pass
        else:
            # 不合格退出程序
            app = config.get_app_value()
            sys.exit(app.exec_())

        # 确认后的关闭窗口
        self.SetTestParameter.close()

#设置电流测试参数界面
class SetTestParameterWindowCurrent:
    def __init__(self):

        self.SetTestParameter = QUiLoader().load("./UI/SetParameterCurrent.ui")  # 设置参数界面文件
        self.SetTestParameter.pushButton.clicked.connect(self.parameter_enter)
        self.SetTestParameter.setWindowTitle("【古鑫】安捷伦34465 电流测试软件 V1.0")
        # 获取全局变量中的内容
        self.test_parameter = config.get_test_parameter_value() #获取电压上下限、SN长度
        self.init_device = config.get_init_device_value() #获取测试型号、设备ID
        set_flag = config.get_set_flag_value() #获取是否已经配置过

        # 判断是否配置过，如果有则沿用更新UI
        if not set_flag:
            pass
        else:
            self.SetTestParameter.SNLenSpinBox.setValue(int(self.test_parameter['SNLenSpinBox']))  # SN长度
            self.SetTestParameter.SetMaxLineEdit.setText(self.test_parameter['MaxData'])  # 电流上限
            self.SetTestParameter.SetMinLineEdit.setText(self.test_parameter['MinData'])  # 电流下限
            self.SetTestParameter.SaveNGcheckBox.setCheckState(self.test_parameter['SaveNGcheck'])  # 保存数据按钮 !!!内容未编辑


    # 测试参数确认按钮按下后
    def parameter_enter(self):

        # 获取UI内容
        self.test_parameter['SNLenSpinBox'] = self.SetTestParameter.SNLenSpinBox.text()    #SN长度
        self.test_parameter['MaxData'] = self.SetTestParameter.SetMaxLineEdit.text()  #电流上限
        self.test_parameter['MinData'] = self.SetTestParameter.SetMinLineEdit.text()  #电流下限
        self.test_parameter['SaveNGcheck'] = self.SetTestParameter.SaveNGcheckBox.checkState()# 保存数据按钮 !!!内容未编辑

        # 在按下确认之前创建用户输入的参数表
        send_excel_parameter = ExceInit.ExcelData()
        fine_name = send_excel_parameter.ExcelInit(self.test_parameter['MaxData'], \
                                                self.test_parameter['MinData'], \
                                                self.test_parameter['SNLenSpinBox'],\
                                                'C', \
                                                self.init_device['TestModel'], \
                                                self.init_device['ScanDeviceID'], \
                                                self.init_device['BatchNo'] )
        # 将电压差EXCEL文件名，放置全局变量中
        config.change_excel_name_value(fine_name)

        # 创建表后重新初始行、列、序列号
        config.recovery_ui_excel()

        # 置位set_flag，代表已经配置过了
        config.change_set_flag_value(True)

        # 确认后的关闭窗口
        self.SetTestParameter.close()
